// import React, { Component } from 'react';
// import { WebView } from 'react-native-webview';
// import { Tab, Tabs, Text } from 'native-base';
// import { Button } from 'react-native';


// export default class App extends Component {
//   constructor(props) {
//     super(props);
//     this.state = {
//       href: `http://172.16.15.22:8080/index.html?no=loaded`
//     };
//     this.emit = this.emit.bind(this);
//     this.change = this.change.bind(this);
//   }

//   emit() {
//     this.webref.injectJavaScript(`
//           document.body.style.backgroundColor = 'blue';
//           show('emit')
//       `);
//   }
//   change() {
//     this.setState({
//       href: `http://172.16.15.22:8080/index.html?no=${new Date().getTime()}`
//     })
//   }
//   render() {
//     setTimeout(() => {
//       this.webref.injectJavaScript(`document.body.style.backgroundColor = 'blue';`);
//     }, 2000);


//     const runFirst = `
//     document.body.style.backgroundColor = 'red';
//   `;
//     return (
//       <Tabs>
//         <Tab heading="Tab1">
//           <Button onPress={this.emit} title='加载后注入'></Button>
//           <Button onPress={this.change} title='重新渲染webview'></Button>
//           <WebView
//             ref={(r) => {
//               this.webref = r;
//             }}
//             originWhitelist={['*']}
//             onMessage={event => {
//               console.log(event, event.nativeEvent.data);
//             }}
//             source={{ uri: this.state.href }}
//             injectedJavaScript={runFirst}
//           />
//         </Tab>
//       </Tabs>
//     );
//   }
// }

// /**
//  * 1. web客户端加载完毕。1.判断是否为移动端webview页面 2.向移动端发送token 3.向移动端发送固定参数fd-page-loaded。4 .触发web系统事件fd-page-loaded。
//  * 2. web端提供"msg/web-to-mobile原子操作"。web2mobile初始化事件写在fd-page-loaded内
//  *
//  * 3. mobile端WebView的onMessage事件，调用原子操作"msg/listen-web"。（原子操作：1.监听web端消息 2.判断fd-page-loaded 3.触发mobile端系统事件fd-page-loaded）
//  * 4. mobile端初始化调用web端事件，写在fd-page-loaded内
//  *
//  * 5. mobile端提供"msg/mobile-to-web原子操作"。web端提供全局函数，传参组件编号，事件编号，参数, token。框架判断token，然后进行事件调用。
//  */